import numpy as np
import pandas as pd
import datetime, re
# Getting data from already complied csv file
data = pd.read_csv('bitcoin.csv', encoding='utf-8', parse_dates=True, usecols=["Timestamp", "Close", "Weighted_Price"])
data['Weighted_Price'].fillna(value=0, inplace=True) # for filling NaN with 0 on days where there was no trade
data['Close'].fillna(method='ffill', inplace=True) # to forward propogate the previous values to NaN places
# Turtle Strategy was based on daily data with breakouts in a range of 20-55 days. Therefore we take range to be 55 days.
# As out data are in minutes, convert days into minutes
signal_lookback = 55 * 24 * 60 # days * hours * minutes
data['BuyOrSell'] = np.zeros(len(data)) # initializing the dataframe
data['RollingMax'] = data['Close'].shift(1).rolling(signal_lookback, min_periods=signal_lookback).max()
data['RollingMin'] = data['Close'].shift(1).rolling(signal_lookback, min_periods=signal_lookback).min()
data.loc[data['RollingMax'] < data['Close'], 'BuyOrSell'] = 1
data.loc[data['RollingMin'] > data['Close'], 'BuyOrSell'] = -1
print(data)
# ================ #
# DataFrame TABLE #
# ================ #
import plotly
import plotly.graph_objs as go
from plotly.offline import *
init_notebook_mode(connected=True)
# =================================================== #
# Ploting Closing Price, Rolling Max and Rolling Min #
# =================================================== #
trace1 = go.Scatter(
x=data['Timestamp'],
y=data['Close'],
mode = 'lines',
name='Closing Price'
)
trace2 = go.Scatter(
x=data['Timestamp'],
y=data['RollingMax'],
mode = 'lines',
name='RollingMax'
)
trace3 = go.Scatter(
x=data['Timestamp'],
y=data['RollingMin'],
mode = 'lines',
name='RollingMin'
)
data = [trace1, trace2, trace3]
plotly.offline.iplot(data, filename='close_rollingMax_Min.html')
# ======================================================================================= #
# Ploting Closing Price and a Subplot showing where to Buy and to Sell (Turtle Strategy) #
# ======================================================================================= #
trace1 = go.Scatter(
x=data['Timestamp'],
y=data['Close']
)
trace2 = go.Scatter(
x=data['Timestamp'],
y=data['BuyOrSell']
)
fig = plotly.tools.make_subplots(rows=4, cols=1, specs=[[{'rowspan': 3}], [None], [None], [{}]],
shared_xaxes=True, shared_yaxes=True,
subplot_titles=('BTC Price','Buy(+1) Or Sell(-1)'),
vertical_spacing=0.1)
fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 4, 1)
plotly.offline.iplot(fig, filename='bitcoin_turtle_analysis.html')